﻿using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ChatServer
{
    public partial class ChatServer : Form
    {
        private delegate void UpdateStatusCallback(string strMessage);
        
        public ChatServer()
        {
            InitializeComponent();
        }

        private void buttonConnect_Click(object sender, EventArgs e)
        {
            //ip uit textbox wordt een IPAddress object
            IPAddress ipAddress = IPAddress.Parse(txtIp.Text);
            int serverPort = Convert.ToInt32(txtPort.Text);

            //Maak een nieuwe instantie van de monitor class aan en geef het ip adress daar aan mee
            Monitor serverMonitor = new Monitor(ipAddress, serverPort);

            //event handler
            Monitor.StatusChangedEvent += new StatusChangedEventHandler(serverMonitor_StatusChanged);

            //Roep de methode aan die de connecties checkt
            serverMonitor.StartMonitoring();

            //laat de gebruiker weten dat het monitoren bezig is
            labelServerstatus.Text = "Binnenkomende connecties aan het controleren....";
            txtOutput.AppendText("Server Started....\r\n");

            //fields disablen
            txtIp.Enabled = false;
            txtPort.Enabled = false;
            buttonConnect.Text = "Disconnect";
            txtOutput.ReadOnly = true;
        }

        private void UpdateStatus(string strMessage)
        {
            //update de log met berichten
            txtOutput.AppendText(strMessage + "\r\n");
        }

        public void serverMonitor_StatusChanged(object sender, StatusChangedEventArgs e)
        {
            this.Invoke(new UpdateStatusCallback(this.UpdateStatus), new object[] {e.eventMessage});
        }
    }
}